/***********************************************************
 *
 * Gaoth
 * Copyright (c) 2011- Marcus Lundgren
 *
 * This software is provided 'as-is', without any express or implied warranty.
 * In no event will the authors be held liable for any damages arising from
 * the use of this software.
 *
 * Permission is granted to anyone to use this software for any purpose,
 * including commercial applications, and to alter it and redistribute it freely,
 * subject to the following restrictions:
 *
 *  1. The origin of this software must not be misrepresented; you must not
 *     claim that you wrote the original software. If you use this software
 *     in a product, an acknowledgment in the product documentation would be
 *     appreciated but is not required.
 *
 *  2. Altered source versions must be plainly marked as such,
 *     and must not be misrepresented as being the original software.
 *
 *  3. This notice may not be removed or altered from any source distribution.
 *
 ***********************************************************/

#include "packet_manager.h"

namespace gth
{
namespace shared
{
namespace network
{
PacketManager::PacketManager()
{

}

PacketManager::~PacketManager()
{

}

void PacketManager::to_packet( const BasePayload& payload, sf::Packet& p ) const
{
    payload.to_packet( p );
}

std::auto_ptr<BasePayload> PacketManager::parse_packet( sf::Packet& p ) const
{
    BasePayload *payload;

    int type = BasePayload::LOGIN;

    p >> type;

    switch( type )
    {
        case BasePayload::LOGIN:
            payload = new LoginPayload();
            break;
        case BasePayload::LOGIN_STATUS:
            payload = new LoginStatusPayload();
            break;
        case BasePayload::MODEL:
            payload = new ModelPayload();
            break;
        default:
            break;
    }

    payload->extract_data_from_packet( p );
    payload->type = type;

    return std::auto_ptr<BasePayload>( payload );
}
}
}
}
